closure properties of regular languages in theory of computation